#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File  : 应用案例.py
# @Author: anarchy
# @Date  : 2025/05/13
# @Desc  : 智能PPT生成gradio应用

import gradio as gr
from dwspark.config import Config
from dwspark.models import PPTGenerator
from loguru import logger

# 初始化配置和PPT生成器
# 请确保您的环境变量或dwspark配置已正确设置

try:
    config = Config()
    ppt_generator = PPTGenerator(config=config)
    logger.info("智能PPT生成器初始化成功 (Gradio App).")
except Exception as e:
    logger.error(f"初始化PPT生成器失败: {e}")
    ppt_generator = None 

def generate_ppt_for_chatbot(query_text: str) -> str:
    """
    根据用户输入的文本主题生成PPT。
    """
    if not ppt_generator:
        return "错误：PPT生成器未成功初始化，请检查配置和日志。"
    if not query_text or query_text.strip() == "":
        return "请输入有效的PPT主题。"

    logger.info(f'接收到PPT主题 (Gradio): "{query_text}"')
    
    # 调用 dwspark 的核心功能
    sid_direct = ppt_generator.create_ppt_from_text(
        query_text=query_text,
        template_id="20240718489569D",  # 模板ID，可以根据需要调整
        author="Datawhale用户",       # PPT作者，可以根据需要调整
        is_card_note=True,
        ai_image_type="normal"        # 图片类型: "normal" 或 "advanced"
    )
    
    if sid_direct:
        logger.info(f"PPT创建任务已启动 (Gradio)，SID: {sid_direct}")
        ppt_url_direct = ppt_generator.poll_for_result(sid_direct)
        
        if ppt_url_direct:
            logger.info(f"PPT已生成 (Gradio)！下载链接: {ppt_url_direct}")
            return f"PPT已生成！下载链接: [{ppt_url_direct}]({ppt_url_direct})"
        else:
            logger.warning(f"轮询PPT结果失败或超时 (Gradio)，SID: {sid_direct}")
            return f"生成PPT失败或超时 (SID: {sid_direct})。请检查日志或稍后再试。"
    else:
        logger.error(f'启动PPT创建任务失败 (Gradio)，主题: "{query_text}"')
        return "启动PPT创建任务失败，请检查输入或服务状态。"

# 创建 Gradio 界面
iface = gr.Interface(
    fn=generate_ppt_for_chatbot,
    inputs=gr.Textbox(lines=3, placeholder="例如：请帮我制作一份关于大模型技术发展历程的PPT...", label="请输入您的PPT主题："),
    outputs=gr.Markdown(label="生成结果", value="点击上方按钮提交主题后，生成的PPT链接将显示在此处。"), # 改为 Markdown 并添加初始值
    title="智能PPT生成助手",
    description="输入您想要生成的PPT主题，AI将为您自动创建演示文稿。基于Datawhale Spark SDK。",
    allow_flagging="never"
)

if __name__ == "__main__":
    logger.info("正在启动Gradio应用...")
    # share=True 会创建一个公开链接，方便分享
    # inbrowser=True 会自动在浏览器中打开
    iface.launch(inbrowser=True) 